#include<iostream>
#include<queue>
#include<vector>
using namespace std;


 
struct TreeNode 
{
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode() : val(0), left(nullptr), right(nullptr) {}
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    TreeNode(int x, TreeNode* left, TreeNode* right) : val(x), left(left), right(right) {}
};
 
class Solution 
{
public:
    vector<vector<int>> levelOrder(TreeNode* root) 
    {
        vector<vector<int>>vv;
        int levelsize = 1;
        queue<TreeNode*>q;
        if (root)
        {
            q.push(root);
            while (!q.empty())
            {
                vector<int>v;
                for (int i = 1; i <= levelsize; i++)
                {
                    TreeNode* front = q.front();
                    q.pop();
                    if (front->left)q.push(front->left);
                    if (front->right)q.push(front->right);
                    v.push_back(front->val);
                }
                levelsize = q.size();
                vv.push_back(v);
            }
        }
        
        return vv;
    }
};